import { createRouter, createWebHistory } from 'vue-router'
import { constantRoutes, anyRoute, generateRoutes } from './routes'
import { useUserStore } from '@/stores/modules/user'
// import { getStorage } from '@/utils/storage'

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: constantRoutes
})

// 不在这里添加404路由，而是在动态路由添加完成后再添加

// 路由守卫
router.beforeEach(async (to, from, next) => {
  const userStore = useUserStore()
  const token = userStore.token

  // 如果访问登录页，直接放行
  if (to.path === '/login' || to.path === '/register') {
    next()
    return
  }

  // 检查是否有token
  if (!token) {
    next('/login')
    return
  }

  // 如果已经添加了动态路由，直接放行
  if (userStore.hasRoutes) {
    next()
    return
  }

  // 获取菜单数据并添加动态路由
  try {
    const menuList = userStore.menuList

    if (menuList && menuList.length > 0) {
      // 生成动态路由
      const dynamicRoutes = generateRoutes(menuList)

      // 添加动态路由
      dynamicRoutes.forEach(route => {
        router.addRoute(route)
      })

      // 更新store状态
      userStore.setMenuList(menuList)
      userStore.setHasRoutes(true)

      // 添加404路由（必须在最后，在hasRoutes设置为true之后）
      // 使用setTimeout确保在下一个tick中添加，避免时序问题
      setTimeout(() => {
        router.addRoute(anyRoute)
      }, 0)

      // 重新导航到目标路由
      next({ ...to, replace: true })
    } else {
      // 清除可能存在的无效token
      userStore.clearUserData()
      next('/login')
    }
  } catch (error) {
    console.error('添加动态路由失败:', error)
    // 清除可能存在的无效数据
    userStore.clearUserData()
    next('/login')
  }
})

export default router
